/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Alertas;

import Entidades.Empresa;
import Entidades.Enviofuncionamiento;
import Entidades.Equipo;
import Entidades.Medicion;
import Entidades.Subscripcionfuncionamiento;
import Persistencia.FachadaPersistencia;
import java.util.ArrayList;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.mail.MessagingException;

/**
 *
 * @author Luis
 */
public class AlertaFuncionamiento implements Alerta {

    ArrayList<Equipo> equipos;
    ArrayList<Subscripcionfuncionamiento> subscripciones;

    @Override
    public void enviarAlerta(ArrayList _equipos, ArrayList _subscr) {
        this.equipos = _equipos;
        this.subscripciones = _subscr;
        String asunto = "Equipo sin enviar datos";
        for (int i = 0; i < equipos.size(); i++) {
            String mensaje = generarMensaje(equipos.get(i));
            for (int j = 0; j < subscripciones.size(); j++) {
                if ((equipos.get(i) == subscripciones.get(j).getSdSensorEquipo()) && validarEnvio(subscripciones.get(j))) {
                    Mailer m = new Mailer();
                    Enviofuncionamiento envio = new Enviofuncionamiento();
                    try {
                        m.enviarMail(asunto, mensaje, subscripciones.get(j).getSdUsers().getEmail());
                        envio.setEstado("Enviado");
                        System.out.println("Envio mail");
                    } catch (MessagingException ex) {
                        envio.setEstado("No enviado");
                        Logger.getLogger(AlertaFueraDeLoNormal.class.getName()).log(Level.SEVERE, null, ex);
                    }
                    envio.setSdSensorSubscripcionfuncionamiento(subscripciones.get(j));
                    envio.setDescripcion(subscripciones.get(j).getSdUsers().getEmail() + ":\n" + mensaje);
                    FachadaPersistencia.getInstancia().guardar(envio);
                }
            }

        }
    }

    public String generarMensaje(Equipo equipo) {
        Empresa empresa = equipo.getSdSensorEmpresa();
        Medicion ultimaMedicion = equipo.getUltimaMedicion();
        String fechaUltima;
        if (ultimaMedicion == null) {
            fechaUltima = "No se encontron datos";
        } else {
            fechaUltima = ultimaMedicion.getFecha().toLocaleString() + "hs";
        }
        String encabezado = "Fecha: " + new Date().toLocaleString() + "hs\n"
                + "Equipo: " + equipo.getNombre() + " no envía datos\n"
                + "Código: " + equipo.getCodigoEquipo() + "\n"
                + "Ultimo dato recibido el: " + fechaUltima + "\n"
                + "Tiempo sin enviar datos permitido: " + equipo.getTiempoSinEnviarDatos() + "hs\n"
                + "Tiempo entre alertas configurado: " + equipo.getTiempoEntreAlerta() + "hs\n"
                + "Empresa: " + empresa.getNombre() + "\n"
                + "Ubicación: " + equipo.getUbicacion() + "\n";
        return encabezado;
    }

    public boolean validarEnvio(Subscripcionfuncionamiento _sub) {
        Enviofuncionamiento envio = _sub.obtenerUltimaAlertaFuncionamintoParaEnvio();
        if (envio == null) {
            return true;
        } else {
            return false;
        }
    }
}
